home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / checkbox / registries / hal.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-11-11  |  16KB  |  269 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import re
  5. import string
  6. import posixpath
  7. from checkbox.lib.cache import cache
  8. from checkbox.lib.dmi import DmiNotAvailable
  9. from checkbox.lib.pci import Pci
  10. from checkbox.lib.usb import Usb
  11. from checkbox.properties import String
  12. from checkbox.registry import Registry
  13. from checkbox.registries.command import CommandRegistry
  14. from checkbox.registries.link import LinkRegistry
  15. from checkbox.registries.map import MapRegistry
  16.  
  17. class UnknownName(object):
  18.     
  19.     def __init__(self, function):
  20.         self._function = function
  21.  
  22.     
  23.     def __get__(self, instance, cls = None):
  24.         self._instance = instance
  25.         return self
  26.  
  27.     
  28.     def __call__(self, *args, **kwargs):
  29.         name = self._function(self._instance, *args, **kwargs)
  30.         if name and name.startswith('Unknown ('):
  31.             name = None
  32.         
  33.         return name
  34.  
  35.  
  36.  
  37. class DeviceRegistry(Registry):
  38.     '''Registry for HAL device information.
  39.  
  40.     Each item contained in this registry consists of the properties of
  41.     the corresponding HAL device.
  42.     '''
  43.     
  44.     def __init__(self, properties):
  45.         self._properties = properties
  46.  
  47.     
  48.     def __str__(self):
  49.         strings = _[1]
  50.         return '\n'.join(strings)
  51.  
  52.     
  53.     def _get_bus(self):
  54.         return self._properties.get('linux.subsystem')
  55.  
  56.     
  57.     def _get_category(self):
  58.         if 'system.hardware.vendor' in self._properties:
  59.             return 'SYSTEM'
  60.         if self._get_product_id():
  61.             return 'OTHER'
  62.  
  63.     
  64.     def _get_driver(self):
  65.         return self._properties.get('info.linux.driver')
  66.  
  67.     
  68.     def _get_path(self):
  69.         return self._properties.get('linux.sysfs_path', '').replace('/sys', '')
  70.  
  71.     
  72.     def _get_product_id(self):
  73.         if 'info.subsystem' in self._properties:
  74.             product_id = '%s.product_id' % self._properties['info.subsystem']
  75.             if product_id in self._properties:
  76.                 return self._properties[product_id]
  77.         
  78.         if 'pnp.id' in self._properties:
  79.             match = re.match('^(?P<vendor_name>.*)(?P<product_id>[%s]{4})$' % string.hexdigits, self._properties['pnp.id'])
  80.             if match:
  81.                 return int(match.group('product_id'), 16)
  82.         
  83.  
  84.     
  85.     def _get_vendor_id(self):
  86.         if 'info.subsystem' in self._properties:
  87.             vendor_id = '%s.vendor_id' % self._properties['info.subsystem']
  88.             if vendor_id in self._properties:
  89.                 return self._properties[vendor_id]
  90.         
  91.  
  92.     
  93.     def _get_subproduct_id(self):
  94.         return self._properties.get('pci.subsys_product_id')
  95.  
  96.     
  97.     def _get_subvendor_id(self):
  98.         return self._properties.get('pci.subsys_vendor_id')
  99.  
  100.     
  101.     def _get_product(self):
  102.         bus = self._get_bus()
  103.         if bus in ('drm', 'net', 'platform', 'pci', 'pnp', 'scsi_generic', 'scsi_host', 'tty', 'usb', 'video4linux'):
  104.             return None
  105.         if 'usb.interface.number' in self._properties:
  106.             return None
  107.         if self._properties.get('info.category') == 'ac_adapter':
  108.             return None
  109.         for property in ('alsa.device_id', 'alsa.card_id', 'sound.card_id', 'battery.model', 'ieee1394.product', 'killswitch.name', 'oss.device_id', 'scsi.model', 'system.hardware.product', 'info.product'):
  110.             if property in self._properties:
  111.                 return self._properties[property]
  112.         
  113.  
  114.     _get_product = UnknownName(_get_product)
  115.     
  116.     def _get_vendor(self):
  117.         bus = self._get_bus()
  118.         if bus in ('drm', 'pci', 'rfkill', 'usb'):
  119.             return None
  120.         for property in ('battery.vendor', 'ieee1394.vendor', 'scsi.vendor', 'system.hardware.vendor', 'info.vendor'):
  121.             if property in self._properties:
  122.                 return self._properties[property]
  123.         
  124.  
  125.     _get_vendor = UnknownName(_get_vendor)
  126.     
  127.     def items(self):
  128.         return (('path', self._get_path()), ('bus', self._get_bus()), ('category', self._get_category()), ('driver', self._get_driver()), ('product_id', self._get_product_id()), ('vendor_id', self._get_vendor_id()), ('subproduct_id', self._get_subproduct_id()), ('subvendor_id', self._get_subvendor_id()), ('product', self._get_product()), ('vendor', self._get_vendor()), ('properties', MapRegistry(self._properties)), ('device', LinkRegistry(self)))
  129.  
  130.  
  131.  
  132. class DmiDeviceRegistry(DeviceRegistry):
  133.     _category_to_property = {
  134.         'BIOS': 'system.firmware',
  135.         'BOARD': 'system.board',
  136.         'CHASSIS': 'system.chassis' }
  137.     
  138.     def __init__(self, properties, category):
  139.         super(DmiDeviceRegistry, self).__init__(properties)
  140.         if category not in self._category_to_property:
  141.             raise Exception, 'Unsupported category: %s' % category
  142.         category not in self._category_to_property
  143.         self._category = category
  144.  
  145.     
  146.     def _property(self):
  147.         return self._category_to_property[self._category]
  148.  
  149.     _property = property(_property)
  150.     
  151.     def _get_category(self):
  152.         return self._category
  153.  
  154.     
  155.     def _get_path(self):
  156.         path = super(DmiDeviceRegistry, self)._get_path()
  157.         return posixpath.join(path, self._category.lower())
  158.  
  159.     
  160.     def _get_product(self):
  161.         for subproperty in ('product', 'type', 'version'):
  162.             property = '%s.%s' % (self._property, subproperty)
  163.             product = self._properties.get(property)
  164.             if product and product != 'Not Available':
  165.                 return product
  166.         
  167.  
  168.     
  169.     def _get_vendor(self):
  170.         for subproperty in ('vendor', 'manufacturer'):
  171.             property = '%s.%s' % (self._property, subproperty)
  172.             if property in self._properties:
  173.                 return self._properties[property]
  174.         
  175.  
  176.     _get_vendor = DmiNotAvailable(_get_vendor)
  177.  
  178.  
  179. class HalRegistry(CommandRegistry):
  180.     '''Registry for HAL information.
  181.  
  182.     Each item contained in this registry consists of the udi as key and
  183.     the corresponding device registry as value.
  184.     '''
  185.     command = String(default = 'lshal')
  186.     _deprecated_expressions = (('info\\.bus', 'info.subsystem'), ('([^\\.]+)\\.physical_device', '\x01.originating_device'), ('power_management\\.can_suspend_to_ram', 'power_management.can_suspend'), ('power_management\\.can_suspend_to_disk', 'power_management.can_hibernate'), ('smbios\\.system\\.manufacturer', 'system.hardware.vendor'), ('smbios\\.system\\.product', 'system.hardware.product'), ('smbios\\.system\\.version', 'system.hardware.version'), ('smbios\\.system\\.serial', 'system.hardware.serial'), ('smbios\\.system\\.uuid', 'system.hardware.uuid'), ('smbios\\.bios\\.vendor', 'system.firmware.vendor'), ('smbios\\.bios\\.version', 'system.firmware.version'), ('smbios\\.bios\\.release_date', 'system.firmware.release_date'), ('smbios\\.chassis\\.manufacturer', 'system.chassis.manufacturer'), ('smbios\\.chassis\\.type', 'system.chassis.type'), ('system\\.vendor', 'system.hardware.vendor'), ('usb_device\\.speed_bcd', 'usb_device.speed'), ('usb_device\\.version_bcd', 'usb_device.version'))
  187.     
  188.     def __init__(self, *args, **kwargs):
  189.         super(HalRegistry, self).__init__(*args, **kwargs)
  190.         self._deprecated_patterns = (lambda .0: for a, b in .0:
  191. (re.compile('^%s$' % a), b))(self._deprecated_expressions)
  192.  
  193.     
  194.     def _get_key(self, key):
  195.         for old, new in self._deprecated_patterns:
  196.             key = old.sub(new, key)
  197.         
  198.         return key
  199.  
  200.     
  201.     def _get_value(self, value, type):
  202.         value = value.strip()
  203.         if type == 'bool':
  204.             value = bool(value == 'true')
  205.         elif type == 'double':
  206.             value = float(value.split()[0])
  207.         elif type == 'int' or type == 'uint64':
  208.             value = int(value.split()[0])
  209.         elif type == 'string':
  210.             value = str(value.strip("'"))
  211.         elif type == 'string list':
  212.             value = [ v.strip("'") for v in value.strip('{}').split(', ') ]
  213.         else:
  214.             raise Exception, 'Unknown type: %s' % type
  215.         return []
  216.  
  217.     
  218.     def _ignore_device(self, device):
  219.         if not device.bus:
  220.             return True
  221.         if not (device.product) and device.product_id is None:
  222.             return True
  223.         if (device.subproduct_id is None or device.subvendor_id is not None or device.subproduct_id is not None) and device.subvendor_id is None:
  224.             return True
  225.         if device.bus != 'dmi' and 'virtual' in device.path.split(posixpath.sep):
  226.             return True
  227.         return False
  228.  
  229.     
  230.     def items(self):
  231.         devices = []
  232.         for record in self.split('\n\n'):
  233.             if not record:
  234.                 continue
  235.             
  236.             name = None
  237.             properties = { }
  238.             for line in record.split('\n'):
  239.                 match = re.match("udi = '(.*)'", line)
  240.                 if match:
  241.                     udi = match.group(1)
  242.                     name = udi.split(posixpath.sep)[-1]
  243.                     continue
  244.                 
  245.                 match = re.match('  (?P<key>.*) = (?P<value>.*) \\((?P<type>.*?)\\)', line)
  246.                 if match:
  247.                     key = self._get_key(match.group('key'))
  248.                     value = self._get_value(match.group('value'), match.group('type'))
  249.                     properties[key] = value
  250.                     continue
  251.             
  252.             if name == 'computer':
  253.                 properties['linux.subsystem'] = 'dmi'
  254.                 properties['linux.sysfs_path'] = '/sys/devices/virtual/dmi/id'
  255.                 device = DeviceRegistry(properties)
  256.                 devices.append(device)
  257.                 for category in ('BIOS', 'BOARD', 'CHASSIS'):
  258.                     device = DmiDeviceRegistry(properties, category)
  259.                     devices.append(device)
  260.                 
  261.             device = DeviceRegistry(properties)
  262.             devices.append(device)
  263.         
  264.         return _[1]
  265.  
  266.     items = cache(items)
  267.  
  268. factory = HalRegistry
  269.